package com.qtt.app.controller;

import com.qtt.app.common.ApiResponse;
import com.qtt.app.entity.RequestData.UpdateUser;
import com.qtt.app.entity.User;
import com.qtt.app.service.UserService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
@Api(tags = "用户管理", description = "UserController")   //tags是api名字，description是简介，value:已废用
@RestController
@RequestMapping("/User")
public class UserController {
    @Autowired
    UserService userService;

//    @ApiOperation(value = "查询所有用户", notes = "可以查user表中的所有数据")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
//    @GetMapping("/list")
//    public ApiResponse<List<User>> listall(){
//        userService.getAll();
//
//        List<User> entities = userService.getAll();
//        if (entities !=null){
//            return ApiResponse.<List<User>>builder().code(200).message("查看成功").data(entities).build();
//        }
//        else{
//            return ApiResponse.<List<User>>builder().code(400).message("该表目前没有数据").data(entities).build();
//        }
//    }

//    @ApiOperation(value = "app端用户注册", notes = "如果未在微信小程序绑定账号，则需要用手机在app注册，一个手机号只能注册一次账号。注册成功返回userId")
//    @PostMapping("/register")
//    public ApiResponse<Integer> register(@ApiParam(value="手机号",required = true) @RequestParam("phone") String phone,
//                                      @ApiParam(value="密码",required = true) @RequestParam("password") String password,
//                                      @ApiParam(value="昵称",required = true) @RequestParam("nickname") String nickname,
//                                      @ApiParam(value="真实姓名",required = true) @RequestParam("realName") String realName,
//                                      @ApiParam(value="公司",required = false) @RequestParam("company") String company,
//                                      @ApiParam(value="职位",required = false) @RequestParam("position") String position){
//        User entity = userService.getUserByPhone(phone);
//
//        if (entity ==null){//等于null说明，该手机号码未被注册，可以使用该号码进行注册
//            int id = userService.appUserRegister(phone, nickname, realName, password, company, position);
//            Integer id2 = new Integer(id);
//            return ApiResponse.<Integer>builder().code(200).message("注册成功，返回userId").data(id2).build();
//        }
//        else {//该手机号码已经存在表中，则无法注册
//            return ApiResponse.<Integer>builder().code(400).message("注册失败，该手机号已经注册过").data(null).build();
//        }
//
//    }


//    @ApiOperation(value = "app端用户登录", notes = "手机登录，一个手机号只能注册一次账号。0为密码登录；1验证码登录、无需密码。登录成功会返回该用户的所有信息包括userId。")
//    @PostMapping("/login")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name="phone",value="手机号",paramType = "query",required=true),
//            @ApiImplicitParam(name="password",value="密码，flag为1时表示验证码登录，不用输入密码；为0时表示账号密码登录",paramType = "query",defaultValue = "noPassword",required=false),
//            @ApiImplicitParam(name="flag",value="注意是String，使用何种登录方式的flag。0为密码登录；1验证码登录、无需密码",allowableValues="0,1",paramType = "query",required=true)
//    })
//    public ApiResponse<User> login(@RequestParam(value="phone",required=true) String phone,
//                                   @RequestParam(value="password",required=false,defaultValue="noPassword") String password,
//                                   @RequestParam(value="flag",required=true) String flag){
////    public ApiResponse<User> login(@ApiParam(value="手机号",required = true) @RequestParam("phone") String phone){
//        //将string转换成int
//        Integer it = new Integer(flag);
//        int judgeFlag = it.intValue();
//        User entity = userService.getUserByPhone(phone);
//        //如果查找到该手机对应的表数据，那么意味着该用户已经授权使用过小程序，那么可以通过验证码或者密码直接登录
//        if (entity !=null){
//            //flag为1，表示验证码登录，无需密码
//            if(judgeFlag == 1){
//                return ApiResponse.<User>builder().code(200).message("登录成功").data(entity).build();
//            }
//            else{//如果flag=0.意味着使用账号密码登录
//                if (entity.getPassword() == password){
//                    return ApiResponse.<User>builder().code(200).message("登录成功").data(entity).build();
//                }
//                else{
//                    return ApiResponse.<User>builder().code(400).message("您的账号已绑定过企团团微信小程序账号，但密码错误").data(null).build();
//                }
//            }
//
//        }
//        else {//未在表中找到该手机对应的用户
//            return ApiResponse.<User>builder().code(400).message("登录失败，该账号未绑定过企团团微信小程序账号，请注册新账号").data(entity).build();
//        }
//
//    }
//


    @ApiOperation(value = "修改一条记录", notes = "只传需要修改的参数.")
    @PutMapping("/list/{id}")
    public ApiResponse<String> updateUserByIdb(@ApiParam(value="用户id",required = true) @PathVariable("id") Long id,
                                               @ApiParam(value="修改用户信息：不修改的就删掉，只传要修改的字段",required = true) @RequestBody(required=true) UpdateUser requestData){
        //先以userId往用户表查找，如果不存在，则无法修改；如果存在，在原来的记录上更新需要修改的字段即可。
        Long userId=id;
        User entity = userService.getById(userId);
        if (entity ==null){
            return ApiResponse.<String>builder().code(400).message("修改失败,输入的id有误，该用户不存在").data("fail").build();
        }
        System.out.println(entity);
        if((requestData.getPhone())!=null ){
            entity.setPhone(requestData.getPhone());
        }
        if(requestData.getUserPicture() != null){
            entity.setHead(requestData.getUserPicture());
        }
        if(requestData.getPassword() != null){
            entity.setPassword(requestData.getPassword());
        }
        if(requestData.getSex() != null){
            entity.setSex(requestData.getSex());
        }
        if(requestData.getNickname() != null){
            entity.setNickname(requestData.getNickname());
        }
        if(requestData.getRealName() != null){
            entity.setRealName(requestData.getRealName());
        }
        if(requestData.getCompany() != null){
            entity.setCompany(requestData.getCompany());
        }
        if(requestData.getPosition() != null){
            entity.setPosition(requestData.getPosition());
        }
        Date gmtModified = new Date();
        entity.setGmtModified(gmtModified);
        System.out.println("第二次：");
        System.out.println(entity);
        Boolean b = userService.updateById(userId,entity);
        if (b == true){
            return ApiResponse.<String>builder().code(200).message("修改成功").data(b.toString()).build();
        }
        else {
            return ApiResponse.<String>builder().code(400).message("修改失败").data(b.toString()).build();
        }
    }

    @ApiOperation(value = "注销用户", notes = "注销的用户号码、openid改成空，昵称改为注销用户")
    @PutMapping("/cancelUser/{id}")
    public ApiResponse<String> cancelUser(@PathVariable("id") Long id){
        Boolean b = userService.cancelUser(id);

        if (b == true){
            return ApiResponse.<String>builder().code(200).message("注销成功").data(b.toString()).build();
        }
        else {
            return ApiResponse.<String>builder().code(400).message("注销失败").data(b.toString()).build();
        }
    }

    //注意@ApiImplicitParam只作用于swagger，实际上他的required并不适用于实际，如果要让postman和具体请求中也能有default值和必须填与否，还是要在@RequestParam写。
//    @ApiOperation(value = "修改一条记录", notes = "只传需要修改的参数")
//    @PutMapping("/list/{id}")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name="id",value="用户id",paramType = "path",required=true,dataType = "Long"),
//            @ApiImplicitParam(name="phone",value="手机号",paramType = "query",defaultValue = "不修改则不填",required=false),
//            @ApiImplicitParam(name="password",value="密码",paramType = "query",defaultValue = "不修改则不填",required=false),
//            @ApiImplicitParam(name="head",value="头像，传的是图片保存地址，所以需要先上传图片",paramType = "query",defaultValue = "不修改则不填",required=false),
//            @ApiImplicitParam(name="nickname",value="昵称",paramType = "query",defaultValue = "不修改则不填",required=false),
//            @ApiImplicitParam(name="realName",value="真名",paramType = "query",defaultValue = "不修改则不填",required=false),
//            @ApiImplicitParam(name="company",value="公司",paramType = "query",defaultValue = "不修改则不填",required=false),
//            @ApiImplicitParam(name="position",value="职位",paramType = "query",defaultValue = "不修改则不填",required=false),
//            @ApiImplicitParam(name="sex",value="性别，String格式，1为男性，2为女性,0未知",paramType = "query",allowableValues="0,1,2",defaultValue = "0",required=false)
//    })
//    public ApiResponse<String> updateUserByIdb(@PathVariable(value="id") Long id,@RequestParam(value="phone",required=false,defaultValue="不修改则不填") String phone,
//                                               @RequestParam(value="password",required=false,defaultValue="不修改则不填") String password,
//                                               @RequestParam(value="head",required=false,defaultValue="不修改则不填") String head,
//                                               @RequestParam(value="nickname",required=false,defaultValue="不修改则不填") String nickname,
//                                               @RequestParam(value="realName",required=false,defaultValue="不修改则不填") String realName,
//                                               @RequestParam(value="sex",required=false,defaultValue="0") String sex,
//                                               @RequestParam(value="company",required=false,defaultValue="不修改则不填") String company,
//                                               @RequestParam(value="position",required=false,defaultValue="不修改则不填") String position){
//        //先以userId往用户表查找，如果不存在，则无法修改；如果存在，在原来的记录上更新需要修改的字段即可。
//        Long userId=id;
//        User entity = userService.getById(userId);
//        if (entity ==null){
//            return ApiResponse.<String>builder().code(400).message("修改失败,输入的id有误，该用户不存在").data("fail").build();
//        }
//        System.out.println(entity);
//
//        System.out.println(phone+","+realName+",sex="+sex);
//        if(phone.equals("不修改则不填")==false ){
//            entity.setPhone(phone);
//        }
//        if(head.equals("不修改则不填")==false){
//            entity.setHead(head);
//        }
//        if(password.equals("不修改则不填")==false){
//            entity.setPassword(password);
//        }
//        if(sex.equals("0")==false){
//            Integer sex_int = Integer.valueOf(sex);
//            entity.setSex(sex_int);
//        }
//        if(nickname.equals("不修改则不填")==false){
//            entity.setNickname(nickname);
//        }
//        if(realName.equals("不修改则不填")==false){
//            entity.setRealName(realName);
//        }
//        if(company.equals("不修改则不填")==false){
//            entity.setCompany(company);
//        }
//        if(position.equals("不修改则不填")==false){
//            entity.setPosition(position);
//        }
//        Date gmtModified = new Date();
//        entity.setGmtModified(gmtModified);
//        System.out.println("第二次：");
//        System.out.println(entity);
//        Boolean b = userService.updateById(userId,entity);
//        if (b == true){
//            return ApiResponse.<String>builder().code(200).message("修改成功").data(b.toString()).build();
//        }
//        else {
//            return ApiResponse.<String>builder().code(400).message("修改失败").data(b.toString()).build();
//        }
//    }


    @ApiOperation(value = "根据id删除一条记录", notes = "哈哈哈")
    //注意是@PathVariable 不是@PathParam ；这个是路径传值
    @DeleteMapping("/list/{id}")
    public ApiResponse<String> DeleteUserById(@PathVariable("id") Long id){
        Boolean b = userService.deleteById(id);

        if (b == true){
            return ApiResponse.<String>builder().code(200).message("删除成功").data(b.toString()).build();
        }
        else {
            return ApiResponse.<String>builder().code(400).message("删除失败").data(b.toString()).build();
        }
    }

    @ApiOperation(value = "根据id查找一条记录", notes = "哈哈哈")
    //注意是@PathVariable 不是@PathParam ；这个是路径传值
    @GetMapping("/list/{id}")
    public ApiResponse<User> getUserById(@PathVariable("id") Long id){
        User entity = userService.getById(id);

        if (entity != null){
            return ApiResponse.<User>builder().code(200).message("查找成功").data(entity).build();
        }
        else {
            return ApiResponse.<User>builder().code(400).message("查找失败").data(null).build();
        }

    }

//    @ApiOperation(value = "通过手机号码获取用户id", notes = "登录时没有返回用户id，可以借助该接口获取")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
//    @GetMapping("/getUserByPhone")
//    public ApiResponse<Long> getUserByPhone(@ApiParam(value="手机号码",required = true) @RequestParam(value="phone",required=true) String phone){
//        Long id = userService.getUserByPhone(phone);
//        if(id==0){
//            return ApiResponse.<Long>builder().code(400).message("该手机号对应的账号还未建立").data(id).build();
//        }
//        else{
//            return ApiResponse.<Long>builder().code(200).message("获取成功，返回用户id").data(id).build();
//        }
//    }

    //不需要添加用户记录
//    @ApiOperation(value = "添加一条新的记录", notes = "")
//    @PostMapping("/list")
//    public ApiResponse<String> addMsg(@ApiParam(value="用户信息：",required = true) @RequestBody(required=true) AddUser requestData){
//        //判断，如果传入的是默认值，需要设置为null或者默认图片
//        User entity = new User();
//        Date gmtCreate = new Date();
//        entity.setGmtCreate(gmtCreate);
//        entity.setNickname(requestData.getNickname());
//        entity.setRealName(requestData.getRealName());
//        entity.setHead(requestData.getUserPicture());
//        entity.setCompany(requestData.getCompany());
//        entity.setPosition(requestData.getPosition());
//        entity.setSex(requestData.getSex());
//        entity.setPhone(requestData.getPhone());
//        entity.setPassword(requestData.getPassword());
//
//        int b = (userService.addUser(entity));
//        if (b == 1){
//            return ApiResponse.<String>builder().code(200).message("添加成功").data("success").build();
//        }
//        else {
//            return ApiResponse.<String>builder().code(400).message("添加失败").data("fail").build();
//        }
//    }


}